package ltd.hanamaki.study.array;

import java.util.Arrays;

/**
 * 冒泡排序
 * 八大排序算法
 * 1. 冒泡排序
 */
public class Demo06 {

    /**
     * 冒泡排序的步骤：
     * 1. 比较数组中相邻的元素，如果前一个数，比 后一个数 大，就交换两个元素的 位置
     *      每次都会产生一个最大的 或者最小的 数字
     * 2. 到 第二次 比较的时候，就会 少一次 排序
     *
     * 2. 依次循环，直到结束
     * @param args
     */
    public static void main(String[] args) {

        int arr[] = {12, 45, 67, 67, 543, 34, 65, 87, 9546};
        int[] sort = sort(arr);
        System.out.println(Arrays.toString(sort));

    }

    public static int[] sort(int array[]) {
        /* 临时变量 */
        int temp = 0;
        /* 外层循环，控制排序要排多少次 */
        for (int i = 0; i < array.length - 1; i++) {
            /* 控制时序操作。如果两个数 在比较的 过程中，没有出现大值和小值 就不需要交换位置
            * 直接比较下一次即可 */
            boolean flag = false;
            /* 内层循环，控制 每次一排序的 轮数 */
            for (int j = 0; j < array.length - 1 - i; j++) {
                /* 如果 前一个比后一个大就交换位置 */
                if (array[j] > array[j + 1]) {
                    temp = array[j];
                    array[j] = array[j + 1];
                    array[j + 1] = temp;
                    flag = true;
                }
            }
            if (flag == false) {
                break;
            }
        }
        return array;
    }
}
